/**
 * 示例:
  输入: [0,1,0,3,12]
  输出: [1,3,12,0,0]

  说明:
  必须在原数组上操作，不能拷贝额外的数组。
  尽量减少操作次数。

  题目来源：https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/132
 * */

const array = [2, 0, 1, 4, 0, 0, 0, 5, 7, 8];
function rightZero(arr) {
  let next, current;
  let len = arr.length;
  for(let i = len - 1; i > 0; i--) {
    if(arr[i] != 0) continue; // 最后一位是0 则跳过本次循环
    next = i+1;
    current = arr[i];
    while(arr[next] != 0 && next != len)  {
      arr[next - 1] = arr[next];
      next++;
    }
    arr[next -1] = current
  }
  console.log(arr)
}

function moveZeroToLast(arr) {
  let len = arr.length;
  return arr.filter(item => item === 0 ? len-- && false: true)
            .concat(Array(arr.length - len).fill(0))
}

function moveZeroToLast2(arr) {
  let count = 0;
  while(arr.includes(0)) {
    arr.splice(arr.indexOf(0), 1);
    count++;
  }
  // Array.prototype.push.apply(arr, Array(count).fill(0))
  arr.push(...Array(count).fill(0))
  return arr;
}

// rightZero(array)
// console.log(moveZeroToLast(array))
console.log(moveZeroToLast2(array))